﻿using System;
using Microsoft.Office.Interop.Excel;
using System.Xml;
using System.IO;

namespace clasesBase
{
    public class ExportaExcel
    {
        public ExportaExcel(System.Windows.Forms.DataGridView dgvConsulta, string path_guardar, string titulo)
        {
            exportaExcel(dgvConsulta, path_guardar, titulo);
        }

        private void exportaExcel(System.Windows.Forms.DataGridView dgvConsulta, string path_guardar, string titulo)
        {
            try
            {
                string temp;
                int iColumnas = 0;
                Application xlsApp = new Application();//creo una aplicación Excel 
                xlsApp.DisplayAlerts = false;
                Worksheet xlsSheet; //creo una hoja 
                Workbook xlsBook; //creo un libro 
                xlsApp.Visible = false; //la aplicación no es visible 

                string path_excel_modelo = System.Windows.Forms.Application.StartupPath + "\\plantilla.xls";
                if (File.Exists(path_excel_modelo)) // Si existe la plantilla parto desde ahí
                 xlsBook = xlsApp.Workbooks.Open(path_excel_modelo);
                else xlsBook = xlsApp.Workbooks.Add(true);//añado el libro a la aplicación 

                xlsSheet = (Worksheet)xlsBook.ActiveSheet; //activo la hoja, para el libro 

                Empresa empresa = new Empresa();
                xlsSheet.Cells[1, 4] = empresa.Razon_social;
                xlsSheet.Cells[2, 4] = string.Format("{0}/{1}/{2} {3}:{4}", DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year, DateTime.Now.Hour, DateTime.Now.Minute);

                Range rangoLogoEmpresa = xlsApp.get_Range("A7:F7");
                rangoLogoEmpresa.Merge();
                rangoLogoEmpresa.Value = titulo.Trim().ToUpper();

                Range rangoFecha = xlsApp.get_Range("E6:F6");
                rangoFecha.Merge();
                rangoFecha.Value = DateTime.Today; // string.Format("{0}/{1}/{2}", DateTime.Today.Date.Day, DateTime.Today.Date.Month, DateTime.Today.Date.Year);
                for (int iCol = 0; iCol < dgvConsulta.Columns.Count; iCol++)
                {
                    if (dgvConsulta.Columns[iCol].Visible == true)
                    {
                        xlsSheet.Cells[8, iCol + 1] = dgvConsulta.Columns[iCol].HeaderText;
                        iColumnas++;
                    }
                }

                for (int iRow = 0; iRow < dgvConsulta.Rows.Count; iRow++)
                {
                    for (int iCol = 0; iCol < dgvConsulta.Columns.Count; iCol++)
                    {
                        if (dgvConsulta.Columns[iCol].Visible == true)
                        {
                            temp = dgvConsulta[iCol, iRow].Value.ToString();
                            xlsSheet.Cells[iRow + 9, iCol + 1] = temp;
                        }
                    }
                }

                //Definir el rango y aplicarle un formato.
                xlsSheet.Columns.AutoFit(); //Ajusta ancho de todas las columnas 
                xlsBook.SaveAs(path_guardar);
                xlsApp.Visible = true;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
}
